﻿#region namespace
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Collections.Generic;
using MS.InformationManagement.Presenter.InsertarRadicado;
using MS.InformationManagement.DAL.DocumentCenter;
using System.Collections;
using MS.InformationManagement.Support.Constants;
using MS.InformationManagement.DAL.RecordCenter;
using Microsoft.SharePoint.Taxonomy;
using Microsoft.SharePoint;
using MS.InformationManagement.DAL.Support;
using Microsoft.SharePoint.WebControls;
using MS.InformationManagement.Support;
using System.Web;
using MS.InformationManagement.Presenter.Support;
using System.Linq;
using System.Text;
using MS.InformationManagement.Presenter.InsertarRadicadoSalida;
using MS.InformationManagement.Controls._CONTROLTEMPLATES.InformationManagerControls;
#endregion

namespace MS.InformationManagement.WP.DocumentCenter.InsertarRadicadoSalida
{
    public partial class InsertarRadicadoSalidaUserControl : BaseControl, IInsertarRadicadoSalidaView
    {

        #region fields

        private InsertarRadicadoSalidaPresenter _presenter;
        private string _RemitenteID;

        #endregion

        #region Properties

        public TaxonomyFieldValue Country { set { TermsPaisSelectors.SelectedTerm = value; } }
        public Core.TransactionsResponse.ITransactionResponse OperationResponse { get; set; }
        public List<Radicado> AssociatedRadicadosData { get; set; }
        public Contactos remitente { get; set; }
        public string RadicadoGenerado { get; set; }
        public RadicadoPersonaSalida Radicado_Persona { get; set; }
        public RadicadoEmpresaSalida Radicado_Empresa { get; set; }
        public string[] Tipos { get; set; }
        public string[] Modos { get; set; }
        public SPListItemCollection childRadicados { get; set; }
        public IEnumerable<MedioDeEnvio> MediosDeEnvio { get; set; }
        public string SubjectExpediente
        {
            get { return txtAsuntoExpendiente.Text; }
            set
            {
                txtAsuntoExpendiente.Text = value;
                txtAsuntoExpendiente.Enabled = string.IsNullOrEmpty(value);
            }
        }
        public string AssociatedAction { get { return Page.Request.QueryString["associatedaction"]; } }
        public List<string> AssociatedRadicados
        {
            get
            {
                if (Page.Request.QueryString["associtedids"] == null)
                    return null;
                else
                {
                    List<string> selectedIds = new List<string>();
                    foreach (var id in Page.Request.QueryString["associtedids"].Split(','))
                    {
                        selectedIds.Add(id);
                    }
                    return selectedIds;
                }
            }
        }
        public string Sender
        {
            get { return Page.Request.QueryString["sender"]; }
        }
        public string RemitenteID
        {
            get
            {
                if (string.IsNullOrEmpty(_RemitenteID)) { _RemitenteID = Request.QueryString.Get("remitenteID"); }
                return _RemitenteID;
            }
            set
            {
                _RemitenteID = value;
            }
        }
        public int? CurrentId
        {
            get
            {
                if (string.IsNullOrEmpty(Page.Request.QueryString["ID"]))
                    return null;
                else
                    return int.Parse(Page.Request.QueryString["ID"]);
            }
        }
        public int? DepartamentoUsuarioActual
        {
            get
            {
                if (this.ViewState["DepartamentoUsuarioActual"] == null)
                    return 0;

                return (int)this.ViewState["DepartamentoUsuarioActual"];
            }
            set { this.ViewState["DepartamentoUsuarioActual"] = value; }
        }
        public string CurrentList
        {
            get
            {
                string _currentList = string.Empty;
                if (string.IsNullOrEmpty(Page.Request["ListId"]) && string.IsNullOrEmpty(Page.Request["List"]))
                    return null;
                else
                {
                    SPSecurity.RunWithElevatedPrivileges(delegate()
                    {
                        using (SPSite ElevatedsiteColl = new SPSite(SPContext.Current.Site.ID))
                        {
                            using (SPWeb ElevatedSite = ElevatedsiteColl.OpenWeb())
                            {
                                _currentList = string.IsNullOrEmpty(Page.Request["ListId"]) ? ElevatedSite.Lists[new Guid(Page.Request["List"])].Title : ElevatedSite.Lists[new Guid(Page.Request["ListId"])].Title;

                            }
                        }
                    });
                    return _currentList;
                }
             }
        }
        public string CurrentListID
        {
            get
            {
                string _currentList = string.Empty;
                if (string.IsNullOrEmpty(Page.Request["ListId"]) && string.IsNullOrEmpty(Page.Request["List"]))
                    return null;
                else
                {
                    SPSecurity.RunWithElevatedPrivileges(delegate()
                    {
                        using (SPSite ElevatedsiteColl = new SPSite(SPContext.Current.Site.ID))
                        {
                            using (SPWeb ElevatedSite = ElevatedsiteColl.OpenWeb())
                            {
                                _currentList = string.IsNullOrEmpty(Page.Request["ListId"]) ? ElevatedSite.Lists[new Guid(Page.Request["List"])].ID.ToString(): ElevatedSite.Lists[new Guid(Page.Request["ListId"])].ID.ToString();
                               
                            }
                        }
                    });
                    return _currentList;
                }
            }
        }
        public string Strategy
        {
            get { return Page.Request.QueryString["strategy"]; }
        }
        //public bool UsaConCopia { get; set; }
        public bool UsaConCopia
        {
            get
            {
                if (this.ViewState["UsaConCopia"] == null)
                    return false;

                return (bool)this.ViewState["UsaConCopia"];
            }
            set { this.ViewState["UsaConCopia"] = value; }
        }

        public string IsInformed { get { return Page.Request.QueryString["IsInformed"]; } }
        #endregion

        #region Form Events

        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);
            Page.RegisterAjaxLoaderPlugin();

            labelControls(true);

            #region validaciones
            if (!IsPostBack) { this.Cache["remitenteID"] = ""; }
            //txtForm3.Required(ExceptionConstants.ERROR_DDL_OBLIGATORIO, "ValBtnAddRadicado", AjaxControlToolkit.ValidatorCalloutPosition.BottomRight);
            txtTelefono.Required(ExceptionConstants.ERROR_DDL_OBLIGATORIO, "ValBtnAddRadicado", AjaxControlToolkit.ValidatorCalloutPosition.BottomRight);
            txtTelefono.MaxLength = 20;
            txtDireccion.Required(ExceptionConstants.ERROR_DDL_OBLIGATORIO, "ValBtnAddRadicado", AjaxControlToolkit.ValidatorCalloutPosition.BottomRight);
            txtDireccion.MaxLength = 70;
            txtEmail.RegularExpression(@"^([\w-]+\.)*?[\w-]+@[\w-]+\.([\w-]+\.)*?[\w]+$", ExceptionConstants.ERROR_INVALID_EMAIL, "ValBtnAddRadicado", AjaxControlToolkit.ValidatorCalloutPosition.BottomRight);
            txtEmail.MaxLength = 254;
            txtAsunto.Required(ExceptionConstants.ERROR_DDL_OBLIGATORIO, "ValBtnAddRadicado", AjaxControlToolkit.ValidatorCalloutPosition.BottomRight);
            txtNombre.Required(ExceptionConstants.ERROR_DDL_OBLIGATORIO, "ValBtnAddRadicado", AjaxControlToolkit.ValidatorCalloutPosition.BottomRight);
            txtNombre.MaxLength = 35;
            txtFolios.Required(ExceptionConstants.ERROR_CAMPO_NULO, "ValBtnAddRadicado", AjaxControlToolkit.ValidatorCalloutPosition.BottomRight);
            txtFolios.MinMax(1, 500, "Este campo no puede ser mayor a 500 ni inferior a 1", "ValBtnAddRadicado", AjaxControlToolkit.ValidatorCalloutPosition.BottomRight);
            txtFolios.Numeric("999", false);
            txtFoliosAnexos.Required(ExceptionConstants.ERROR_DDL_OBLIGATORIO, "ValBtnAddRadicado", AjaxControlToolkit.ValidatorCalloutPosition.BottomRight);
            txtFoliosAnexos.MinMax(0, 10000, "Este campo no puede ser mayor a 10000", "ValBtnAddRadicado", AjaxControlToolkit.ValidatorCalloutPosition.BottomRight);
            txtFoliosAnexos.Numeric("99999", false);
            radProperties.ShowOnlyFilesTab = true;
            radProperties.ShowOficioRemisorioTab = true;
            //ddlMediosDeEnvio.Required("Debe seleccionar un valor para esta lista", "ValBtnAddRadicado", AjaxControlToolkit.ValidatorCalloutPosition.BottomRight);
            AsociationToolBar.TooltipRadicado = "Responder radicado de salida";
            if (IsInformed == "1")
                AsociationToolBar.Visible = false;
            #endregion

            if (CurrentId != 0 && CurrentId != null)
                tabRespuesta.Visible = true;

            showInformedMessage();      //Show a message if strategy is informed

            if (RemitenteID == "-1")
                txtAsuntoExpendiente.Required(ExceptionConstants.ERROR_EXPEDIENTE_ASUNTO, "ValBtnAddRadicado", AjaxControlToolkit.ValidatorCalloutPosition.BottomRight);

            radProperties.ShowDeliveryTabs = false;
            radProperties.OnError += new InformationManagement.Controls.ErrorHandler(radProperties_OnError);
            trdSel.OnPageLoadComplete += new TRDSelector.PageLoadHandler(OnPageLoadComplete);

            btnAdd.AddLoader();
        }

        void OnPageLoadComplete(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(Strategy) && string.IsNullOrEmpty(AssociatedAction)) 
                trdSel.SetCurrentUserDependency(); 
        }

        protected void radProperties_OnError(object sender, Exception e)
        {
            HandleError(e);
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                _presenter = new InsertarRadicadoSalidaPresenter(this);
                if (!IsPostBack)
                {
                    Cache.Remove(SPContext.Current.Web.CurrentUser.LoginName.GetUserWithOutDomain() + "files");
                    Cache.Remove(SPContext.Current.Web.CurrentUser.LoginName.GetUserWithOutDomain() + "ContactosList");
                    _presenter.HandleLoad();
                    if (string.IsNullOrEmpty(RemitenteID))
                        DesplegarVentanaModal(SPContext.Current.Web.Url + "/_layouts/MS.InformationManagement.WP/SearchSender.aspx?IsOutbound=1", "Sistema de Gestión Documental", 980, 460, this.Page);
                    else if (RemitenteID != "-1")
                        _presenter.LoadRemitente();
                    else
                    {
                        _presenter.HandleAssociatedRadicado();
                        txtForm3.Enabled = false;
                    }
                }

                if (CurrentId != 0 && CurrentId != null)
                    _presenter.HandleLoadPostback();

                if (Strategy == "UpdateCopy")
                    ShowForUpdateCopy();
                if (Strategy == "UpdateRemitente")
                    ShowForUpdateRemitente();
                if (Strategy == "view")
                    DisableControls();
                if (Strategy == "edit")
                    ShowForEdit();

                #region hide con copy tab
                if (UsaConCopia)
                    radProperties.ShowTabConCopia = true;
                else
                    radProperties.ShowTabConCopia = false;
                #endregion

            }
            catch (Exception ex)
            {
                HandleError(ex);
            }
        }

        protected void ImbBtnSearch_Click(object sender, ImageClickEventArgs e)
        {
            DesplegarVentanaModal(SPContext.Current.Web.Url + "/_layouts/MS.InformationManagement.WP/SearchSender.aspx?IsOutbound=1", "Sistema de Gestión Documental", 980, 460, this.Page);
        }

        protected void ddlTipo_SelectedIndexChanged(object sender, EventArgs e)
        {
            controlsfromContentType();
        }

        protected void btnAdd_Click(object sender, EventArgs e)
        {
            try
            {
                var items = radProperties.Files.Where(x => x.IsMainDocument == true);
                if (items == null || items.Count() < 1)
                    throw new Exception(ExceptionConstants.ERROR_ARCHIVO_NULO_OFICIO_REMISORIO);
                if (items.Count(fItem => !fItem.Extension.Equals("docx")) > 0) {
                    HandleWarning("Solo se permiten documentos de word como oficios remisorios de un radicado de salida. Verique el documento e inténtelo de nuevo");
                    return;
                }

                TipoRemitente tipoRemitente = (TipoRemitente)Enum.Parse(typeof(TipoRemitente), ddlTipo.SelectedValue);

                switch (tipoRemitente)
                {
                    case TipoRemitente.Ciudadano:
                        Radicado_Persona = getRadicadoPersona();
                        Radicado_Empresa = null;
                        break;
                    case TipoRemitente.Empresa:
                        Radicado_Persona = null;
                        Radicado_Empresa = getRadicadoEmpresa();
                        break;
                    default:
                        break;
                }

                if (!CurrentId.HasValue)
                    _presenter.HandleSave();
                else
                {
                    _presenter.HandleUpdate();
                    //this.GoCurrentUserHome();
                }
            }
            catch (Exception ex)
            {
                HandleError(ex);
            }
        }

        protected void btnClose_Click(object sender, EventArgs e)
        {
            string isDlg = Request.QueryString.Get("IsDlg");
            if (!string.IsNullOrEmpty(isDlg) && isDlg.Equals("1")) { this.CloseWindow(); }
            else { this.GoCurrentUserHome(); }
        }


        #endregion

        #region Implemented Methods

        public void LoadDependencyForCurrentUser() 
        {
            if (_presenter == null)
                _presenter = new InsertarRadicadoSalidaPresenter(this);
            
            trdSel.SetCurrentUserDependency();
        }

        public void LoadForAnexo()
        {
            try
            {
                if (AssociatedRadicadosData[0] is RadicadoPersona || AssociatedRadicadosData[0] is RadicadoEmpresa)
                    this.loadSenderData((RadicadoExterno)AssociatedRadicadosData[0]);
                if (AssociatedRadicadosData[0] is RadicadoPersonaSalida || AssociatedRadicadosData[0] is RadicadoEmpresaSalida)
                    this.loadReceiverData((RadicadoExterno)AssociatedRadicadosData[0]);
                controlsfromContentType();
                if (RemitenteID != "-1") return;
                divSender.Visible = true;
                btnAdd.Enabled = true;
                divAsuntoExpediente.Visible = true;
                if (AssociatedAction == "response")
                    lblSender.Text = string.Format(GlobalConstants.MESSAGE_RADICADO_ANEXO, AssociatedRadicados[0]);
                if (AssociatedAction == "new")
                    lblSender.Text = string.Format(GlobalConstants.MESSAGE_RADICADO_ASOCIATION, AssociatedRadicados[0]);

                //Anexo subject validation
                //txtAsuntoExpendiente.Required(ExceptionConstants.ERROR_EXPEDIENTE_ASUNTO, "ValBtnAddRadicado", AjaxControlToolkit.ValidatorCalloutPosition.BottomRight);

                //TRD configuration
                trdSel.DisableTRDExceptDocumentalType = true;
            }
            catch (Exception ex)
            {
                HandleError(ex);
            }
        }

        public void Show()
        {
            ddlTipo.DataSource = Tipos;
            ddlTipo.DataBind();
            ddlMediosDeEnvio.DataSource = MediosDeEnvio;
            ddlMediosDeEnvio.DataBind();

            if (Radicado_Empresa != null || Radicado_Persona != null)
                setControlsStateCurrentRadicado();
        }

        public void ShowPostBack()
        {
            txtForm3.Enabled = false;
            if (childRadicados != null)
                radProperties.childRadicados = childRadicados;
        }

        private void controlsfromContentType()
        {
            try
            {
                TipoRemitente tipoRemitente = (TipoRemitente)Enum.Parse(typeof(TipoRemitente), ddlTipo.SelectedValue);
                switch (tipoRemitente)
                {
                    case TipoRemitente.Ciudadano:
                        labelControls(true);
                        break;
                    case TipoRemitente.Empresa:
                        labelControls(false);
                        break;
                    default:
                        break;
                }
            }
            catch (Exception ex)
            {
                HandleError(ex);
            }

        }

        private void labelControls(bool esCiudadano)
        {

            if (esCiudadano == true)
            {
                lblID.Text = "Cedula";
                lblForm1.Text = "Nombre";
                lblForm2.Text = "Primer apellido";
                lblForm3.Text = "Segundo apellido";
            }
            else
            {
                lblID.Text = "NIT";
                lblForm1.Text = "Razón Social";
                lblForm2.Text = "Sigla";
                lblForm3.Text = "Representante";
            }
        }

        private void setControlsState(bool state)
        {
            ddlTipo.Enabled = state;
            txtForm1.Enabled = state;
            txtNITCedula.Enabled = state;
            txtForm2.Enabled = state;
        }

        public void RadicadoUpdated()
        {
            Cache.Remove(SPContext.Current.Web.CurrentUser.LoginName.GetUserWithOutDomain() + "files");
            Cache.Remove(SPContext.Current.Web.CurrentUser.LoginName.GetUserWithOutDomain() + "ContactosList");
            this.ShowAlertMessageAndRedirect("Radicado actualizado exitosamente", ListHelper.CurrentUserLibraryUrl);
        }

        public void RadicadoGenerated()
        {
            Cache.Remove(SPContext.Current.Web.CurrentUser.LoginName.GetUserWithOutDomain() + "files");
            Cache.Remove(SPContext.Current.Web.CurrentUser.LoginName.GetUserWithOutDomain() + "ContactosList");
            this.ShowAlertMessageAndRedirect(OperationResponse.ResponseMessage, ListHelper.CurrentUserLibraryUrl);
        }

        private void setControlsStateCurrentRadicado()
        {
            if (Radicado_Persona != null)
            {
                ImbBtnSearch.Enabled = false;
                btnAdd.Enabled = true;
                setRadicadoPersonaControles();
            }
            else
                txtForm3.Enabled=true;

            if (Radicado_Empresa != null)
            {
                ImbBtnSearch.Enabled = false;
                btnAdd.Enabled = true;
                setRadicadoEmpresaControles();
            }
            else
                txtForm3.Enabled = true;
            divSender.Visible = true;
            radProperties.ShowOnlyFilesTab = false;
        }

        //public void LoadRemitente()
        //{
        //    //Individual data
        //    Personas remitent = this.remitente as Personas;
        //    Entidades entidades = this.remitente as Entidades;
        //    txtTelefono.Text = remitente.Teléfono;
        //    txtDireccion.Text = remitente.Dirección;
        //    txtEmail.Text = remitente.Email;
        //    txtNITCedula.Text = remitente.ID;
        //    if (remitent != null)
        //    {
        //        txtForm1.Text = remitent.Nombres;
        //        txtForm2.Text = remitent.PrimerApellido;
        //        txtForm3.Text = remitent.SegundoApellido;
        //        ddlTipo.SelectedIndex = 0;
        //        txtForm3.Enabled = false;
        //    }

        //    if (entidades != null)
        //    {
        //        txtForm1.Text = entidades.RazónSocial;
        //        txtForm2.Text = entidades.Sigla;
                
        //        if (Radicado_Empresa != null)
        //            txtForm3.Text = Radicado_Empresa.RepresentanteLegal;
        //        else
        //            txtForm3.Text = entidades.Representante;

        //        ddlTipo.SelectedIndex = 1;
        //        txtForm3.Enabled = true;
        //    }
        //    //setControlsStateCurrentRadicado();
        //    controlsfromContentType();
        //    btnAdd.Enabled = true;
        //    setControlsState(false);

        //}

        public void LoadRemitente()
        {
            //Individual data
            Personas remitent = this.remitente as Personas;
            Entidades entidades = this.remitente as Entidades;


            if (Radicado_Persona == null && Radicado_Empresa == null)
            {
                txtTelefono.Text = remitente.Teléfono;
                txtDireccion.Text = remitente.Dirección;
                txtEmail.Text = remitente.Email;
            }

            txtNITCedula.Text = remitente.ID;

            if (remitent != null)
            {
                txtForm1.Text = remitent.Nombres;
                txtForm2.Text = remitent.PrimerApellido;
                txtForm3.Text = remitent.SegundoApellido;
                txtForm3.Enabled = false;
                ddlTipo.SelectedIndex = 0;
                txtForm3.Enabled = false;
            }

            if (entidades != null)
            {
                txtForm1.Text = entidades.RazónSocial;
                txtForm2.Text = entidades.Sigla;

                if (Radicado_Empresa != null)
                    txtForm3.Text = Radicado_Empresa.RepresentanteLegal;
                else
                    txtForm3.Text = entidades.Representante;

                ddlTipo.SelectedIndex = 1;
                txtForm3.Enabled = true;
            }

            //setControlsStateCurrentRadicado();
            controlsfromContentType();
            btnAdd.Enabled = true;
            setControlsState(false);
        }

        public void DesplegarVentanaModal(string Url, string Titulo, Int32 ancho, Int32 alto, Page pagina)
        {
            StringBuilder scriptModal = new StringBuilder();
            scriptModal.Append("var showMyModalDialog = function() { var options = { ");
            scriptModal.Append("url : '");
            scriptModal.Append(Url);
            scriptModal.Append("', ");
            scriptModal.Append("title: '");
            scriptModal.Append(Titulo);
            scriptModal.Append("', width: ");
            scriptModal.Append(ancho.ToString());
            scriptModal.Append(", height: ");
            scriptModal.Append(alto.ToString());
            scriptModal.Append(", dialogReturnValueCallback: onDialogClose }; SP.UI.ModalDialog.commonModalDialogOpen(" + "'" + Url + "'" + ",options, onDialogClose, null); };  function redirect(url){  location.replace(url);}  ");
            scriptModal.Append("function onDialogClose(dialogResult, returnValue) {  ");
            scriptModal.Append(" if(returnValue) { window.location.search = '?remitenteID=' + returnValue; }else{ SP.UI.ModalDialog.close(SP.UI.DialogResult.cancel); } ");
            //scriptModal.Append("redirect(location.href.split('?')[0] + '?rmtID=' +returnValue); ");
            scriptModal.Append(" } ");

            pagina.ClientScript.RegisterClientScriptBlock(pagina.GetType(), "Mensaje", scriptModal.ToString(), true);
            pagina.ClientScript.RegisterStartupScript(typeof(Page), "Precarga", "ExecuteOrDelayUntilScriptLoaded(showMyModalDialog, 'sp.ui.dialog.js');", true);
        }

        public void ShowForEdit()
        {
            this.DisableControls();

            if (radProperties.Files == null || radProperties.Files.Count == 0)
            {
                radProperties.Enable = true;
                btnAdd.Visible = true;
            }
            tabRespuesta.Visible = true;
            string currentRadicadoId = Radicado_Empresa != null ? Radicado_Empresa.NoRadicado : Radicado_Persona.NoRadicado;
            string Estado = Radicado_Empresa != null ? Radicado_Empresa.Status.Label : Radicado_Persona.Status.Label;
            AsociationToolBar.LoadControlLinks(currentRadicadoId);
            if (IsInformed == "1")
                AsociationToolBar.Visible = false;
            else
                AsociationToolBar.Visible = !btnAdd.Visible;


            if (CurrentListID.ToUpper() != SPContext.Current.Web.CurrentUser.LoginName.GetUserWithOutDomain().ToUpper())
            {
                radProperties.ShowTabSalidas = true;
                radProperties.ShowDeliveryTabs = true;
            }
            else
            {
                radProperties.ShowDeliveryTabs = true;
                radProperties.ShowTabSalidas = false;
            }
            if (Estado == GlobalConstants.METADATA_TERM_STATUS_SOLICITUD_ANULAR || Estado == GlobalConstants.METADATA_TERM_STATUS_ANULADO)
                AsociationToolBar.Visible = false;

            radProperties.EnableRemisionUploadControl = false;
        }

        public void DisableControls()
        {
            txtTipodeAnexo.Enabled = false;
            txtForm1.Enabled = false;
            txtForm2.Enabled = false;
            txtForm3.Enabled = false;
            txtEmail.Enabled = false;
            txtDireccion.Enabled = false;
            //ddlModoRecepcion.Enabled = false;
            txtFolios.Enabled = false;
            txtTelefono.Enabled = false;
            txtFoliosAnexos.Enabled = false;
            txtNombre.Enabled = false;
            trdSel.Enable = false;
            txtAsunto.Enabled = false;
            radProperties.Enable = false;
            btnAdd.Visible = false;
            tabRespuesta.Visible = false;
            TermsPaisSelectors.Enable = false;
            ImbBtnSearch.Visible = false;
            divSearch.Visible = true;
            if (IsInformed == "1")
                AsociationToolBar.Visible = false;
            else
                AsociationToolBar.Visible = true;
            ddlMediosDeEnvio.Enabled = false;

            string currentRadicadoId = Radicado_Empresa != null ? Radicado_Empresa.NoRadicado : Radicado_Persona.NoRadicado;
            string Estado = Radicado_Empresa != null ? Radicado_Empresa.Status.Label : Radicado_Persona.Status.Label;
            AsociationToolBar.LoadControlLinks(currentRadicadoId);
            if (IsInformed == "1")
                AsociationToolBar.Visible = false;
            else
                AsociationToolBar.Visible = !btnAdd.Visible;

            if (Estado == GlobalConstants.METADATA_TERM_STATUS_SOLICITUD_ANULAR || Estado == GlobalConstants.METADATA_TERM_STATUS_ANULADO)
                AsociationToolBar.Visible = false;

            if (!trdSel.SelectedSubSerie.HasValue || trdSel.SelectedSubSerie == 0 || trdSel.SelectedTipoDocumentalID == 0)
                AsociationToolBar.DisableLinks = true;
        }

        public void ShowForUpdateCopy()
        {
            this.DisableControls();
            btnAdd.Visible = true;
        }

        public void ShowForUpdateRemitente()
        {
            this.DisableControls();
            Entidades entidades = this.remitente as Entidades;
            if (entidades != null)
                txtForm3.Enabled = true;
            btnAdd.Visible = true;
            txtTelefono.Enabled = true;
            txtDireccion.Enabled = true;
            txtEmail.Enabled = true;
            btnAdd.Enabled = true;
        }


        #endregion

        #region Private Methods

        private void showInformedMessage()
        {
            if (string.IsNullOrEmpty(Sender)) return;
            divSender.Visible = true;
            lblSender.Text = "Informado por " + Sender;
        }

        private void loadReceiverData(RadicadoExterno radicado)
        {
            txtNombre.Text = radicado.Description;
            txtAsunto.Text = radicado.Asunto;
            trdSel.SelectedSubSerie = int.Parse(radicado.IDTRD.Value.ToString());
            trdSel.SelectedSubSection = int.Parse(radicado.IDSubSeccion.ToString());
            trdSel.SelectedTipoDocumentalID = int.Parse(radicado.Document_Documental_Type_ID.ToString());
            txtDireccion.Text = radicado.Dirección;
            txtEmail.Text = radicado.Email;
            txtTelefono.Text = radicado.Teléfono;
            //ddlDeptos.SeletedTerm = PeopleHelper.GetPropertyUserProfile(GlobalConstants.UP_DEPARTMENT, radicado.RemitenteDestinatario);
            TermsPaisSelectors.SelectedTerm = radicado.Countries;

            if (radicado is RadicadoPersonaSalida)
            {
                var radicadoPersona = (RadicadoPersonaSalida)radicado;
                txtNITCedula.Text = radicadoPersona.Cédula;

                txtForm1.Text = radicadoPersona.Nombres;
                txtForm2.Text = radicadoPersona.PrimerApellido;
                txtForm3.Text = radicadoPersona.SegundoApellido;
                ddlTipo.SelectedValue = TipoRemitente.Ciudadano.ToString();
            }

            if (radicado is RadicadoEmpresaSalida)
            {
                var radicadoEmpresa = (RadicadoEmpresaSalida)radicado;
                txtNITCedula.Text = radicadoEmpresa.Nit;
                txtForm1.Text = radicadoEmpresa.RazónSocial;
                txtForm2.Text = radicadoEmpresa.Sigla;
                txtForm3.Text = radicadoEmpresa.RepresentanteLegal;
                ddlTipo.SelectedValue = TipoRemitente.Ciudadano.ToString();
            }
        }

        private void loadSenderData(RadicadoExterno radicado)
        {
            txtNombre.Text = radicado.Description;
            txtAsunto.Text = radicado.Asunto;
            trdSel.SelectedSubSerie = int.Parse(radicado.IDTRD.Value.ToString());
            trdSel.SelectedSubSection = int.Parse(radicado.IDSubSeccion.ToString());
            trdSel.SelectedTipoDocumentalID = int.Parse(radicado.Document_Documental_Type_ID.ToString());
            txtDireccion.Text = radicado.Dirección;
            txtEmail.Text = radicado.Email;
            //ddlModoRecepcion.SelectedValue = radicado.MedioRecepción.Value.ToString();
            txtTelefono.Text = radicado.Teléfono;
            TermsPaisSelectors.SelectedTerm = radicado.Countries;

            if (radicado is RadicadoPersona)
            {
                var radicadoPersona = (RadicadoPersona)radicado;
                txtNITCedula.Text = radicadoPersona.Cédula;
                txtForm1.Text = radicadoPersona.Nombres;
                txtForm2.Text = radicadoPersona.PrimerApellido;
                txtForm3.Text = radicadoPersona.SegundoApellido;
                ddlTipo.SelectedValue = TipoRemitente.Ciudadano.ToString();
            }

            if (radicado is RadicadoEmpresa)
            {
                var radicadoEmpresa = (RadicadoEmpresa)radicado;
                txtNITCedula.Text = radicadoEmpresa.Nit;
                txtForm1.Text = radicadoEmpresa.RazónSocial;
                txtForm2.Text = radicadoEmpresa.Sigla;
                txtForm3.Text = radicadoEmpresa.RepresentanteLegal;
                ddlTipo.SelectedValue = TipoRemitente.Empresa.ToString();
            }
        }

        private RadicadoEmpresaSalida getRadicadoEmpresa()
        {
            RadicadoEmpresaSalida radicado = new RadicadoEmpresaSalida();
            radicado.Name = txtNombre.Text;
            radicado.TipoAnexo = txtTipodeAnexo.Text;
            radicado.Asunto = txtAsunto.Text;
            radicado.IDTRD = trdSel.SelectedSubSerie.HasValue ? trdSel.SelectedSubSerie : 0;
            radicado.IDSubSeccion = trdSel.SelectedSubSection.HasValue ? trdSel.SelectedSubSection : 0;
            radicado.Document_Documental_Type_ID = int.Parse(trdSel.SelectedTipoDocumentalID.ToString());
            radicado.TipoDocumento = trdSel.SelectedTipoDocumentalName;
            //MedioRecepción selectModo = (MedioRecepción)Enum.Parse(typeof(MedioRecepción), ddlModoRecepcion.SelectedValue);
            radicado.CantidadFolios = int.Parse(txtFolios.Text);
            radicado.CantidadFoliosAnexos = int.Parse(txtFoliosAnexos.Text);
            radicado.Dirección = txtDireccion.Text;
            radicado.Email = txtEmail.Text;
            //radicado.MedioRecepción = selectModo;
            radicado.Nit = txtNITCedula.Text;
            radicado.RazónSocial = txtForm1.Text;
            radicado.RepresentanteLegal = txtForm3.Text;
            radicado.Sigla = txtForm2.Text;
            radicado.Teléfono = txtTelefono.Text;
            radicado.Countries = TermsPaisSelectors.SelectedTerm;
            radicado.DepartamentoUsuario = DepartamentoUsuarioActual;
            radicado.Radicador = SPContext.Current.Web.CurrentUser.LoginName;
            radicado.AttachedFiles = radProperties.Files;
            radicado.AttachedCopys = radProperties.Copys;
            radicado.RemitenteInternoId = SPContext.Current.Web.CurrentUser.ID;
            if (CurrentId.HasValue)
                radicado.Id = CurrentId;
            radicado.MedioDeEnvio = ddlMediosDeEnvio.SelectedItem.Text;
            radicado.IDMedioDeEnvío = int.Parse(ddlMediosDeEnvio.SelectedItem.Value);

            return radicado;
        }

        private RadicadoPersonaSalida getRadicadoPersona()
        {
            RadicadoPersonaSalida radicado = new RadicadoPersonaSalida();
            radicado.Name = txtNombre.Text;
            radicado.TipoAnexo = txtTipodeAnexo.Text;
            radicado.Asunto = txtAsunto.Text;
            radicado.IDTRD = trdSel.SelectedSubSerie.HasValue ? trdSel.SelectedSubSerie : 0;
            radicado.IDSubSeccion = trdSel.SelectedSubSection.HasValue ? trdSel.SelectedSubSection : 0;
            radicado.Document_Documental_Type_ID = int.Parse(trdSel.SelectedTipoDocumentalID.ToString());
            radicado.TipoDocumento = trdSel.SelectedTipoDocumentalName;
            //MedioRecepción selectModo = (MedioRecepción)Enum.Parse(typeof(MedioRecepción), ddlModoRecepcion.SelectedValue);
            //radicado.MedioRecepción = selectModo;
            radicado.CantidadFolios = int.Parse(txtFolios.Text);
            radicado.CantidadFoliosAnexos = int.Parse(txtFoliosAnexos.Text);
            radicado.Dirección = txtDireccion.Text;
            radicado.Email = txtEmail.Text;
            radicado.Cédula = txtNITCedula.Text;
            radicado.Nombres = txtForm1.Text;
            radicado.PrimerApellido = txtForm2.Text;
            radicado.SegundoApellido = txtForm3.Text;
            radicado.Teléfono = txtTelefono.Text;
            radicado.Countries = TermsPaisSelectors.SelectedTerm;
            radicado.Radicador = SPContext.Current.Web.CurrentUser.LoginName;
            radicado.DepartamentoUsuario = DepartamentoUsuarioActual;
            radicado.AttachedFiles = radProperties.Files;
            radicado.AttachedCopys = radProperties.Copys;
            radicado.RemitenteInternoId = SPContext.Current.Web.CurrentUser.ID;
            if (CurrentId.HasValue)
                radicado.Id = CurrentId;
            radicado.MedioDeEnvio = ddlMediosDeEnvio.SelectedItem.Text;
            radicado.IDMedioDeEnvío = int.Parse(ddlMediosDeEnvio.SelectedItem.Value);

            return radicado;
        }

        private void setRadicadoEmpresaControles()
        {

            lblSender.Text = "Radicado '" + Radicado_Empresa.NoRadicado + "' " + lblSender.Text;
            txtNombre.Text = Radicado_Empresa.Name;
            txtAsunto.Text = Radicado_Empresa.Asunto;
            txtTipodeAnexo.Text = Radicado_Empresa.TipoAnexo;
            trdSel.SelectedSubSerie = int.Parse(Radicado_Empresa.IDTRD.Value.ToString());
            trdSel.SelectedSubSection = int.Parse(Radicado_Empresa.IDSubSeccion.ToString());
            trdSel.SelectedTipoDocumentalID = int.Parse(Radicado_Empresa.Document_Documental_Type_ID.ToString());
            txtFolios.Text = Radicado_Empresa.CantidadFolios.ToString();
            txtFoliosAnexos.Text = Radicado_Empresa.CantidadFoliosAnexos.ToString();
            txtDireccion.Text = Radicado_Empresa.Dirección;
            txtEmail.Text = Radicado_Empresa.Email;
            //ddlModoRecepcion.SelectedValue = Radicado_Empresa.MedioRecepción.Value.ToString();
            txtNITCedula.Text = Radicado_Empresa.Nit;
            txtForm1.Text = Radicado_Empresa.RazónSocial;
            txtForm2.Text = Radicado_Empresa.Sigla;
            txtForm3.Text = Radicado_Empresa.RepresentanteLegal;
            txtForm3.Enabled = false;
            txtTelefono.Text = Radicado_Empresa.Teléfono;
            radProperties.Files = Radicado_Empresa.AttachedFiles;
            if (Radicado_Empresa.AttachedCopys.Count != 0)
                radProperties.Copys = Radicado_Empresa.AttachedCopys;
            ddlTipo.SelectedValue = TipoRemitente.Empresa.ToString();
            TermsPaisSelectors.SelectedTerm = Radicado_Empresa.Countries;
            radProperties.Logs = Radicado_Empresa.LogEntries;
            radProperties.DeliveryLogs = Radicado_Empresa.DeliveryLogs;
            radProperties.ChildRadicados = Radicado_Empresa.ChildDocuments == null ? null : Radicado_Empresa.ChildDocuments.ToList();
            radProperties.RadicadoEntrada = Radicado_Empresa.RadicadoEntrada;

            ddlMediosDeEnvio.SelectedValue = Radicado_Empresa.IDMedioDeEnvío.Value.ToString();

        }

        private void setRadicadoPersonaControles()
        {

            lblSender.Text = "Radicado '" + Radicado_Persona.NoRadicado + "' " + lblSender.Text;
            txtNombre.Text = Radicado_Persona.Name;
            txtAsunto.Text = Radicado_Persona.Asunto;
            txtTipodeAnexo.Text = Radicado_Persona.TipoAnexo;
            trdSel.SelectedSubSerie = int.Parse(Radicado_Persona.IDTRD.Value.ToString());
            trdSel.SelectedSubSection = int.Parse(Radicado_Persona.IDSubSeccion.ToString());
            trdSel.SelectedTipoDocumentalID = int.Parse(Radicado_Persona.Document_Documental_Type_ID.ToString());
            txtFolios.Text = Radicado_Persona.CantidadFolios.ToString();
            txtFoliosAnexos.Text = Radicado_Persona.CantidadFoliosAnexos.ToString();
            txtDireccion.Text = Radicado_Persona.Dirección;
            txtEmail.Text = Radicado_Persona.Email;
            //ddlModoRecepcion.SelectedValue = Radicado_Persona.MedioRecepción.Value.ToString();
            //ddlModoRecepcion.SelectedValue = Radicado_Persona.MedioRecepción.ToString();
            txtNITCedula.Text = Radicado_Persona.Cédula;
            txtForm1.Text = Radicado_Persona.Nombres;
            txtForm2.Text = Radicado_Persona.PrimerApellido;
            txtForm3.Text = Radicado_Persona.SegundoApellido;
            txtForm3.Enabled = false;
            txtTelefono.Text = Radicado_Persona.Teléfono;
            radProperties.Files = Radicado_Persona.AttachedFiles;
            if (Radicado_Persona.AttachedCopys.Count != 0)
                radProperties.Copys = Radicado_Persona.AttachedCopys;
            ddlTipo.SelectedValue = TipoRemitente.Ciudadano.ToString();
            TermsPaisSelectors.SelectedTerm = Radicado_Persona.Countries;
            radProperties.RadicadoEntrada = Radicado_Persona.RadicadoEntrada;
            radProperties.Logs = Radicado_Persona.LogEntries;
            radProperties.ChildRadicados = Radicado_Persona.ChildDocuments == null ? null : Radicado_Persona.ChildDocuments.ToList();
            radProperties.DeliveryLogs = Radicado_Persona.DeliveryLogs;
            txtNITCedula.Text = Radicado_Persona.Cédula;
            ddlMediosDeEnvio.SelectedValue = Radicado_Persona.IDMedioDeEnvío.Value.ToString();
        }


        #endregion

    }
}
